package com.example.a11;

import java.io.IOException;
import java.lang.reflect.Proxy;

public class JdkProxyDemo {
    interface Foo {
        void foo();
    }

    static class Target implements Foo {

        @Override
        public void foo() {
            System.out.println("target foo");
        }
    }

    // jdk代理：只能针对接口代理
    // cglib
    public static void main(String[] args) throws IOException {
        // 目标对象
        Target target = new Target();

        // 用来加载在运行期间动态生成的字节码
        ClassLoader loader = JdkProxyDemo.class.getClassLoader();
        // 代理对象
        Foo fProxy = (Foo) Proxy.newProxyInstance(loader, new Class[]{Foo.class}, (proxy, method, args1) -> {
            System.out.println("before...");
            Object result = method.invoke(target, args1);
            System.out.println("after...");
            return result;
        });
        System.out.println(fProxy.getClass());
        // 调用代理
        fProxy.foo();
//        System.in.read();
    }
}
